package com.zust513.mapper;

import com.zust513.entity.Courier;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 配送员数据访问接口
 */
public interface CourierMapper {

    /**
     * 获取所有配送员信息（包含用户信息）
     * @return 配送员列表
     */
    @MapKey("courierId")
    List<Map<String, Object>> findAllCouriers();

    /**
     * 根据ID查询配送员信息
     * @param courierId 配送员ID
     * @return 配送员信息
     */
    @MapKey("courierId")
    Map<String, Object> findCourierById(@Param("courierId") Integer courierId);

    /**
     * 查询配送员服务的区域
     * @param courierId 配送员ID
     * @return 区域列表
     */
    List<Map<String, Object>> findRegionsByCourierId(@Param("courierId") Integer courierId);

    /**
     * 更新配送员审核状态
     * @param courierId 配送员ID
     * @param status 审核状态
     * @return 受影响行数
     */
    int updateAuditStatus(@Param("courierId") Integer courierId, @Param("status") String status);

    /**
     * 查询某区域在指定时间范围内的订单
     * @param regionId 区域ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 订单列表
     */
    @MapKey("orderId")
    List<Map<String, Object>> findOrdersByRegionAndTime(
            @Param("regionId") Integer regionId,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime);

    /**
     * 根据用户ID查询订单
     * @param userId 用户ID
     * @return 订单列表
     */
    @MapKey("orderId")
    List<Map<String, Object>> findOrdersByUserId(@Param("userId") Integer userId);

    /**
     * 获取配送员总数
     * @return 配送员总数
     */
    Integer getTotalCouriersCount();
}
